import axios from 'axios'
import qs from 'qs'
import { API_CONFIG, USER_ROUTES, BUSINESS_ROUTES, FOOD_ROUTES, CART_ROUTES, ORDER_ROUTES, ADDRESS_ROUTES } from './routes'

// API基础配置
const api = axios.create({
  baseURL: API_CONFIG.BASE_URL, // 后端服务器地址
  timeout: API_CONFIG.TIMEOUT, // 请求超时时间
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    console.log('发送API请求:', config.method.toUpperCase(), config.url)
    // 如果是POST请求且数据是对象，自动转换为form-data格式
    if (config.method === 'post' && typeof config.data === 'object' && config.data !== null) {
      config.data = qs.stringify(config.data)
    }
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    console.log('收到API响应:', response.status, response.config.url)
    return response.data // 直接返回数据部分
  },
  error => {
    console.error('API响应错误:', error.response?.status, error.config?.url)
    
    // 统一错误处理
    let errorMessage = '请求失败'
    if (error.response) {
      switch (error.response.status) {
        case 400:
          errorMessage = '请求参数错误'
          break
        case 401:
          errorMessage = '未授权，请重新登录'
          break
        case 403:
          errorMessage = '拒绝访问'
          break
        case 404:
          errorMessage = '请求的资源不存在'
          break
        case 500:
          errorMessage = '服务器内部错误，请稍后重试'
          break
        default:
          errorMessage = `请求失败 (${error.response.status})`
      }
    } else if (error.request) {
      errorMessage = '网络连接失败，请检查网络'
    }
    
    // 可以在这里添加全局错误提示
    // alert(errorMessage)
    
    return Promise.reject(new Error(errorMessage))
  }
)

// 用户相关API
export const userApi = {
  // 用户登录
  login(userId, password) {
    return api.post(USER_ROUTES.LOGIN, { userId, password })
  },
  
  // 用户注册
  register(userInfo) {
    return api.post(USER_ROUTES.REGISTER, userInfo)
  },
  
  // 根据ID获取用户信息
  getUserById(userId) {
    return api.get(USER_ROUTES.GET_USER_BY_ID, { params: { userId } })
  },
  
  // 更新用户信息
  updateUser(userInfo) {
    return api.post(USER_ROUTES.UPDATE_USER, userInfo)
  }
}

// 商家相关API
export const businessApi = {
  // 获取所有商家列表
  getBusinessList() {
    return api.get(BUSINESS_ROUTES.LIST_BUSINESS)
  },
  
  // 根据排序类型获取商家列表
  getBusinessListBySort(sortType) {
    return api.get(BUSINESS_ROUTES.LIST_BUSINESS_BY_SORT, { params: { sortType } })
  },
  
  // 根据ID获取商家信息
  getBusinessById(businessId) {
    return api.post(BUSINESS_ROUTES.GET_BUSINESS_BY_ID, { businessId })
  }
}

// 食品相关API
export const foodApi = {
  // 根据商家ID获取食品列表
  getFoodListByBusinessId(businessId) {
    return api.post(FOOD_ROUTES.LIST_FOOD_BY_BUSINESS_ID, { businessId })
  }
}

// 购物车相关API
export const cartApi = {
  // 获取购物车列表
  getCartList(userId, businessId) {
    return api.post(CART_ROUTES.LIST_CART, { userId, businessId })
  },
  
  // 添加到购物车
  addToCart(cartInfo) {
    return api.post(CART_ROUTES.SAVE_CART, cartInfo)
  },
  
  // 更新购物车
  updateCart(cartInfo) {
    return api.post(CART_ROUTES.UPDATE_CART, cartInfo)
  },
  
  // 从购物车移除
  removeFromCart(cartInfo) {
    return api.post(CART_ROUTES.REMOVE_CART, cartInfo)
  }
}

// 订单相关API
export const orderApi = {
  // 创建订单
  createOrder(orderInfo) {
    return api.post(ORDER_ROUTES.SAVE_ORDER, orderInfo)
  },
  
  // 获取用户订单列表
  getOrderList(userId) {
    return api.post(ORDER_ROUTES.LIST_ORDERS_BY_USER_ID, { userId })
  }
}

// 地址相关API
export const addressApi = {
  // 获取用户地址列表
  getAddressList(userId) {
    return api.post(ADDRESS_ROUTES.LIST_DELIVERY_ADDRESS_BY_USER_ID, { userId })
  },
  
  // 添加地址
  addAddress(addressInfo) {
    return api.post(ADDRESS_ROUTES.SAVE_DELIVERY_ADDRESS, addressInfo)
  },
  
  // 更新地址
  updateAddress(addressInfo) {
    return api.post(ADDRESS_ROUTES.UPDATE_DELIVERY_ADDRESS, addressInfo)
  },
  
  // 删除地址
  removeAddress(daId) {
    return api.post(ADDRESS_ROUTES.REMOVE_DELIVERY_ADDRESS, { daId })
  }
}

// 导出默认的axios实例（用于特殊情况）
export default api